package com.biz.primus.model.order.coupon.vo.consume;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;

import java.io.Serializable;

/**
 * JSON数组描述的用券/积分清单
 *
 * @author Tiger Feng
 * @date 2017年11月16日
 */
@Data
public class CouponVO implements Serializable {
    private static final long serialVersionUID = -3497958100615002283L;
    @JsonProperty("mode")
    private ModeEnum mode;
    // 02-金额券,05-权益券(填入支付行)
    @JsonProperty("coupon_group")
    private GroupEnum group;
    // 券种/积分种类(填入支付行)
    @JsonProperty("coupon_type")
    private String type;
    // 否需要验证支付密码(Y/N)
    @JsonProperty("coupon_need_pwd")
    private String needPwd;
    // 用券活动档期ID(填入支付行)
    @JsonProperty("coupon_event_scd")
    private String eventScd;
    // 用券活动ID(填入支付行)
    @JsonProperty("coupon_event_id")
    private Long eventId;
    // 用券策略ID(填入支付行)
    @JsonProperty("coupon_policy_id")
    private Long policyId;
    // JSON描述的互斥规则
    @JsonProperty("coupon_mutex")
    private Object mutex;
    // 券种对应的付款方式
    @JsonProperty("paycode")
    private String payCode;
    // 券号(单次券既有帐号又有面值)
    @JsonProperty("account")
    private String account;
    // 最大可用金额(按券种+档期ID+活动ID+券号分组合计可用)
    @JsonProperty("available")
    private Double available;
    // 账户余额
    @JsonProperty("balance")
    private Double balance;
    // 付款面值(>0-面值券一次性使用/<=0-余额券多次使用)
    @JsonProperty("face_value")
    private Long faceValue;
    // 面值券限制张数
    @JsonProperty("limit")
    private Long limit;
    // 变值率
    @JsonProperty("rate")
    private Double rate;
    // 积分消费的积分兑换基数
    @JsonProperty("point_exchange")
    private Long pointExchange;
    // 积分消费的兑换消费金额
    @JsonProperty("point_exchange_money")
    private Double pointExchangeMoney;
    // 生效日期
    @JsonProperty("eff_date")
    private java.util.Date effDate;
    // 到期日期
    @JsonProperty("exp_date")
    private java.util.Date expDate;
    // 用券/积分规则描述
    @JsonProperty("describe")
    private String describe;
    // 现金券标记(填入支付行)
    @JsonProperty("coupon_is_cash")
    private String cash;
    // 账户扩展信息 is_pop:Y/N
    @JsonProperty("accnt_ext")
    private String accntExt;

    @AllArgsConstructor
    public enum ModeEnum {
        // 本单可用
        USABLE("0"),
        // 本单有效但被互斥(禁止)
        VALID_EXCLUSION("1"),
        // 本单不可用
        DISABLE("2");
        private String value;
    }

    @AllArgsConstructor
    public enum GroupEnum {
        // 02-金额券
        MONEY("02"),
        // 05-权益券（填入支付行）
        EQUITY("05");
        private String value;
    }
}
